package com.cloud.spring.lamada.main;

import com.cloud.spring.demo.entity.User;
import com.cloud.spring.lamada.inf.Test1Info;
import com.cloud.spring.lamada.inf.Test2Info;
import com.cloud.spring.lamada.inf.Test3Info;
import com.cloud.spring.lamada.inf.Test4Info;
import lombok.extern.log4j.Log4j2;

import java.util.Arrays;
import java.util.List;

@Log4j2
public class LamadaDemo {
    public static void main(String[] args) {
        /**
         * lamada表达式的主要使用场景， 是lamada对象作为参数传递给其他方法，来实现传递行为的目的
         */
        //无参，并且不返回数据的lamada
        Test1Info test1Info = () -> log.info("哈哈哈哈");
        test1Info.test();
        //有参，并且返回数据的lamada
        Test2Info<Integer, String> test2Info = (a, b) -> {
            List<Integer> list = Arrays.asList(a, Integer.parseInt(b));
            return list;
        };
        List<Integer> list = test2Info.test(1, "12");
        log.info(list);
        //方法引用，用于将一个对象的方法执行结果作为lamada的行为
        Test3Info<String, User> test3Info = User::getName;
        User user = new User();
        user.setId(1);
        user.setName("tom");
        log.info(test3Info.test(user));
        //构造方法引用，用于将一个对象的无参构造作为lamada的行为
        Test4Info<User> test4Info = User::new;
        System.out.print(test4Info.test());
    }
}
